package factory.simple;

/**
 * 简单工厂模式
 */
public class Factory {
    /**
     * 使用简单的传递唯一id的方式创建对应的实例
     *
     * @param type
     * @return
     */
    public static Api create(int type) {
        switch (type) {
            case 0:
                return new ImplA();
            case 1:
                return new ImplB();
            default:
                return new ImplC();
        }
    }

    /**
     * 通过限定泛型类，使用类名反射的方式创建实例
     *
     * @param clz
     * @param <T>
     * @return
     */
    public <T extends Api> T create(Class<T> clz) {
        Api api = null;
        try {
            api = (Api) Class.forName(clz.getName()).newInstance();
        } catch (InstantiationException | IllegalAccessException
                | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return (T) api;
    }
}
